package com.baidu.mpks.user.dao;

import com.baidu.mpks.role.domain.Role;
import com.baidu.mpks.user.domain.ShenFeiOrgDTO;
import com.baidu.mpks.user.domain.ShenFeiUserDTO;
import com.baidu.mpks.user.domain.User;
import com.baidu.mpks.user.vo.UserExport;
import com.baidu.mpks.user.vo.UserParam;
import com.baidu.mpks.usergroup.dto.Resources;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.Date;
import java.util.List;

public interface UserDao {

    User findOne(@Param("id") int id);

    User findActiveUserByCode(@Param("code") String code);

    User findByAccount(@Param("userName") String username);

    List<UserExport> findAllUser();

    List<String> findAll();

    List<User> findUserList(@Param("roleId") String roleId, @Param("status") String status, @Param("userName") String userName, @Param("trueName") String trueName, @Param("deptId") Integer deptId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("offset") Integer offset, @Param("pageSize") Integer pageSize);

    Integer findUserListCount(@Param("roleId") String roleId, @Param("status") String status, @Param("userName") String userName, @Param("trueName") String trueName, @Param("deptId") Integer deptId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    List<Integer> findRoleIdListByUserId(@Param("userId") String userId);

    List<Resources> findResourcesByUserId(@Param("id") String id, @Param("type") String type);

    User findByUserId(@Param("userId") String userId);

    List<User> findByUserIds(@Param("userIds") Collection<String> userIds);

    List<User> findNoDeptUsers();

    int insert(User user);

    void updateUserNameAndPassword(User user);

    void updatePassword(User user);

    void insertResourcesByUserId(@Param("userId") String userId, @Param("type") String type, @Param("resources") List<Resources> resources);

    int insertUserOrRole(@Param("userId") String userId, @Param("roleIds") List<Integer> roleIds);

    void update(User user);

    void updateByUserId(User user);

    void updateUserStatus(User user);

    void delete(User user);

    void deleteUserOrRole(@Param("userId") String userId);

    void initUser(User user);

    void deleteResourcesByUserId(@Param("id") String userId, @Param("type") String type);

    void deleteResourcesByUserIdAndResourceId(@Param("id") String userId, @Param("type") String type, @Param("resourceIds") List<Integer> resourceIds);

    void deleteResourcesByUserIdAndResourceName(@Param("id") String userId, @Param("type") String type, @Param("resourceNames") List<String> resourceNames);

    List<User> listByTrueName(@Param("trueName") String trueName);

    Integer insertOrderedTags(@Param("userId") String userId, @Param("tagStr") String tagStr);

    void updateOrderedTags(@Param("userId") String userId, @Param("tagStr") String tagStr);

    String getOrderedTagsByUserId(@Param("userId") String userId);

    void deleteOrderedTagsByUserId(@Param("userId") String userId);

    Role getRoleInfoByName(@Param("roleName") String roleName);

    void synAndCloseShenFeiUser();

    List<ShenFeiUserDTO> getShenFeiUserInfo();

    List<ShenFeiOrgDTO> getShenFeiOrgInfo();

    void updateShenFeiOrgInfoPid(ShenFeiOrgDTO shenFeiOrgDTO);

    void clearShenFeiOrgInfo();

    void clearShenFeiOrgUserRel();

    List<UserParam> getUserByAvicOrgCode(@Param("avicDeptCode") String avicDeptCode);
}
